﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

/*
 Consideraciones,

 */

namespace PHI2
{
    class Base
    {

        
        /// <summary>
        /// Método que agrega fila a la Tabla Mediciones 
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <param name="repeticion"></param>
        /// <param name="idensayo"></param>
        /// <param name="fb"></param>
        /// <param name="tg"></param>
        /// <param name="wg"></param>
        /// <param name="dg"></param>
        /// <param name="ha"></param>
        /// <param name="glauco"></param>
        /// <param name="ap"></param>
        /// <param name="at"></param>
        /// <param name="le"></param>
        /// <param name="pm"></param>
        /// <param name="vl"></param>
        /// <param name="ah1"></param>
        /// <param name="lh1"></param>
        /// <param name="ah2"></param>
        /// <param name="lh2"></param>
        /// <param name="ah3"></param>
        /// <param name="lh3"></param>
        /// <param name="mje"></param>
        /// <param name="cobertura"></param>
        public void AddMedicion(PHIEntities2 es,int idvariedad, int repeticion, int idensayo,
        float fb, float tg, float wg, float dg, float ha, float glauco, float ap, float at, float le, float pm, float vl, float ah1,
        float lh1, float ah2, float lh2, float ah3, float lh3, float mje, float cobertura)
        {
            try
            {
                Mediciones pro = new Mediciones
                {
                    IdVariedad = idvariedad,
                    Repeticion = repeticion,
                    IdEnsayo = idensayo,
                    FB = fb,
                    TG = tg,
                    WG = wg,
                    DG = dg,
                    HA = ha,
                    GLAUCO = glauco,
                    AP = ap,
                    AT = at,
                    LE = le,
                    PM = pm,
                    VI = vl,
                    AH1 = ah1,
                    LH1 = lh1,
                    AH2 = ah2,
                    LH2 = lh2,
                    AH3 = ah3,
                    LH3 = lh3,
                    MJE = mje,
                    COBERTURA = cobertura,
                };

                es.Mediciones.Add(pro);
                es.SaveChanges();
            }

            catch (Exception ex)
            {
                //Console.WriteLine(ex.InnerException);

            }

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <param name="repeticion"></param>
        /// <param name="idensayo"></param>
        public void DeleteMedicion(PHIEntities2 es, int idvariedad, int repeticion, int idensayo) 
        {
            try
            {
                Mediciones pro = es.Mediciones.First(i => ((i.IdVariedad == idvariedad) && (i.Repeticion == repeticion) && (i.IdEnsayo == idensayo)));
                es.Mediciones.Remove(pro);
                es.SaveChanges();
                MessageBox.Show("Eliminado");
            }

            catch (Exception ex)
            {
                //Console.WriteLine(ex.InnerException);
            }
        }

        //Método que agrega fila a la Tabla Variedades
        public void AddVariedad(PHIEntities2 es, int idvariedad, string nombrevariedad, string descripcion)
        {
            try
            {
                Variedades pro = new Variedades
                {
                    IdVariedad = idvariedad,
                    NombreVariedad = nombrevariedad,
                    Descripcion = descripcion,
                };

                es.Variedades.Add(pro);
                es.SaveChanges();
            }

            catch (Exception ex)
            {
                //Console.WriteLine(ex.InnerException);
            }
        }

        
        /// <summary>
        /// Método que elimina fila a la Tabla Variedades segun coincidencia con IdVariedad
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        public void DeleteVariedad(PHIEntities2 es, int idvariedad) 
        {
            try
            {
                Variedades pro = es.Variedades.First(i => ((i.IdVariedad == idvariedad)));
                es.Variedades.Remove(pro);
                es.SaveChanges();
                MessageBox.Show("Se ha eliminado una variedad de la base de datos. Si desea usarla nuevamente, recuerde ingresar código y descripción");
            }

            catch (Exception ex)
            {
                //Console.WriteLine(ex.InnerException);
            }
        }
        
        /// <summary>
        /// Método que agrega fila a la Tabla Parcela
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <param name="repeticion"></param>
        /// <param name="parcela"></param>
        public void AddParcela(PHIEntities2 es, int idvariedad, int repeticion, int parcela)
        {
            try
            {
                Parcelas pro = new Parcelas
                {
                    IdVariedad = idvariedad,
                    Repeticion = repeticion,
                    Parcela = parcela,
                };

                es.Parcelas.Add(pro);
                es.SaveChanges();
            }

            catch (Exception ex)
            {
                //Console.WriteLine(ex.InnerException);
            }
        }
     
        /// <summary>
        /// Método que elimina fila a la Tabla Parecla segun coincidencia con Idvariedad y repeticion
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <param name="repeticion"></param>
        public void DeleteParcela(PHIEntities2 es, int idvariedad, int repeticion)
    {

          var query = from i in es.Mediciones
                    where (i.IdVariedad == idvariedad)
                    select i;
     
          if (query.Count() == 0) // Condicion que elimine fila de parcelas si esque queda solo un  de los dos tipo de ensayo que se pueden hacer en la parcela
          {
              try
              {
                  Parcelas pro = es.Parcelas.First(i => ((i.IdVariedad == idvariedad) && (i.Repeticion == repeticion)));
                  es.Parcelas.Remove(pro);
                  es.SaveChanges();
              }

              catch (Exception ex)
              {
                  //Console.WriteLine(ex.InnerException);
              }
          }
            
    }

        
        /// <summary>
        /// Método que permite realizar Consultas Simples a una Tabla
        /// </summary>
        /// <param name="es"></param>
        /// <param name="id"></param>
        /// <param name="allowvariedad"></param>
        /// <param name="allowensayo"></param>
        public void ConsultaTabla(PHIEntities2 es, int id, bool allowvariedad, bool allowensayo)
        {
            
            if (allowvariedad == true)
            {
                var query = from i in es.Variedades
                            where i.IdVariedad == id
                            select i;

                foreach (var a in query)
                {
                    MessageBox.Show(a.NombreVariedad + ":  " + "Codigo" + id + " " + a.Descripcion);
                    
                }
               
            }

            else if (allowensayo == true)
            {
                var query = from i in es.Ensayo
                            where i.IdEnsayo == id
                            select i;

                foreach (var b in query)
                {
                    MessageBox.Show("Codigo: " + id + "    " + b.Ensayo1);      
                }    
            }
        }

        
        /// <summary>
        /// Método que permite realizar Consulta en tabla Mediciones
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <param name="repeticion"></param>
        /// <param name="idensayo"></param>
        public void ConsultaTablaMediciones(PHIEntities2 es, int idvariedad, int repeticion, int idensayo)
        {
            bool entra = false;
            var query = from i in es.Mediciones
                        where ((i.IdVariedad == idvariedad) && (i.Repeticion == repeticion) && (i.IdEnsayo == idensayo))
                        select i;

            foreach (var a in query)
            {
                MessageBox.Show("FB: " + a.FB + "   TG: " + a.TG + "   WG: " + a.WG + "   DG: " + a.DG + "   HA: " + a.HA + "   GLAUCO: " + a.GLAUCO
                    + "   AP: " + a.AP + "   AT: " + a.AT + "   LE: " + a.LE + "   PM: " + a.PM + "   VI: " + a.VI + "   AH1: " + a.AH1
                    + "   LH1: " + a.LH1 + "   AH2: " + a.AH2 + "   LH2: " + a.LH2 + "   AH3: " + a.AH3 + "   LH3: " + a.LH3 + "   MJE: " + a.MJE
                    + "   Cobertura: " + a.COBERTURA);
                entra = true;
            }
            if (entra == false) MessageBox.Show("Datos no se encuentran en tabla");
            entra = false;
        }

        
        /// <summary>
        /// Método que permite realizar Consulta en Tabla Parcelas
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <param name="repeticion"></param>
        public void ConsultaTablaParcelas(PHIEntities2 es, int idvariedad, int repeticion)
        {
            bool entra = false;
            var query = from i in es.Parcelas
                        where ((i.IdVariedad == idvariedad) && (i.Repeticion == repeticion))
                        select i;
            foreach (var a in query)
            {
                MessageBox.Show("N° Parcela: " + a.Parcela);
                entra = true;
            }
            if (entra == false) MessageBox.Show("Datos no se encuentran en tabla");
            entra = false;
        }

        
        /// <summary>
        /// Método que me devuelve un valor booleano si esque es posible editar la tabla mediciones
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <param name="repeticion"></param>
        /// <param name="idensayo"></param>
        /// <returns></returns>
        public bool PermisoModificarMediciones(PHIEntities2 es, int idvariedad, int repeticion, int idensayo) 
        {
            bool entrar = true;
            var query = from i in es.Mediciones
                        where (i.IdVariedad == idvariedad)
                        && (i.IdEnsayo == idensayo)
                        && (i.Repeticion == repeticion)
                        select i;
            foreach (var a in query)
            {
                entrar = false;
            }
            if ((repeticion <= 2) && (idensayo <= 2) && (entrar == false)) { MessageBox.Show("Secuencia de datos ya se encuentra en tabla"); return entrar; }
            else if ((repeticion > 2 ) || (idensayo > 2)) {MessageBox.Show("Repeticion o Ensayo fuera de rango");return entrar = false; }
            else return entrar = true;
        }

        
        /// <summary>
        /// Método que me devuelve un valor booleano si esque es posible editar la tabla Variedades
        /// </summary>
        /// <param name="es"></param>
        /// <param name="idvariedad"></param>
        /// <returns></returns>
        public bool PermisoModificarVariedades(PHIEntities2 es, int idvariedad)
        {
         bool entrar = true ;
            var query = from i in es.Variedades
                        where (i.IdVariedad == idvariedad)
                        select i;
            foreach (var a in query)
            {
                entrar = false;
            }
            return entrar;
        }

        // Método que me devuelve un valor booleano si esque es posible editar la tabla Variedades
        public bool PermisoModificarParcelas(PHIEntities2 es, int idvariedad, int idrepeticion) 
        {
            bool entrar = true;
            var query = from i in es.Parcelas
                        where ((i.IdVariedad == idvariedad)&&(i.Repeticion == idrepeticion))
                        select i;
            foreach (var a in query)
            {
                entrar = false;
            }
            return entrar;
        } 
    
        }
    }


